package com.example.backend.mapper;


import com.example.backend.model.CardInfo;
import java.util.List;
import java.util.Map;

/**
 * 银行卡信息数据访问接口
 * 定义与数据库中cardinfo表交互的方法，通过MyBatis实现SQL操作映射
 */
public interface CardInfoMapper {

    /**
     * 插入新的银行卡信息
     * @param cardInfo 包含银行卡详细信息的实体对象
     * @return 受影响的行数（成功插入时通常为1）
     */
    int insertCardInfo(CardInfo cardInfo);

    /**
     * 根据银行卡号删除对应记录
     * @param cardID 要删除的银行卡号（16位数字，格式为10103576xxxxxxxx）
     * @return 受影响的行数（成功删除时为1，未找到记录时为0）
     */
    int deleteCardInfoByCardID(String cardID);

    /**
     * 根据银行卡号更新银行卡信息
     * @param cardInfo 包含要更新信息的实体对象，必须包含cardID字段
     * @return 受影响的行数（成功更新时为1，未找到记录时为0）
     */
    int updateCardInfoByCardID(CardInfo cardInfo);

    /**
     * 根据银行卡号精确查询单条记录
     * @param cardID 要查询的银行卡号
     * @return 匹配的银行卡信息实体对象，若未找到则返回null
     */
    CardInfo selectCardInfoByCardID(String cardID);

    /**
     * 根据银行卡号进行模糊查询
     * @param cardID 模糊查询关键词，支持任意位置匹配
     * @return 符合条件的银行卡信息列表，若未找到则返回空列表
     */
    List<CardInfo> selectCardInfoByCardIDLike(String cardID);

    /**
     * 根据开户金额范围查询银行卡信息
     * @param params 包含查询条件的Map，需包含以下键：
     *               - minOpenMoney: 最小开户金额（ BigDecimal 类型）
     *               - maxOpenMoney: 最大开户金额（ BigDecimal 类型）
     * @return 符合条件的银行卡信息列表，若未找到则返回空列表
     */
    List<CardInfo> selectCardInfoByOpenMoneyRange(Map<String, Object> params);
}